package lista_Oliver;
public class ListaS { 

	private Nodo primero;	
    private Nodo ultimo;   
    private int tamano; 
 

public ListaS() { 
	
	this.primero = null; 
	this.ultimo = null; 
	this.tamano = 0; 	
}
//Getters

public Nodo getUltimo(){
	return this.ultimo;
}

//Metodo utilizado para denotar que la lista se encuentra vacia.

    public boolean siVacio() { 
      if (this.primero == null) {
    	 System.out.println("La lista se encuentra vacia"); 
    	 return true; 
      }else return false;
    }   
    
//Metodo para agregar al final de la lista.
    
    public ListaS addLast(int dato) { 
        if(siVacio()) { 
            Nodo nuevo = new Nodo(dato); 
            primero = nuevo; 
            ultimo = nuevo; 
            nuevo.nodoDer = null; 
        }else { 
            Nodo nuevo = new Nodo(dato); 
            nuevo.nodoDer = null; 
            ultimo.nodoDer = nuevo; 
            ultimo = nuevo; 
        }        
        System.out.println("Nodo "+dato+ "insertado");  
        this.tamano++; 
        return this; 
    }
    
//Metodo para borrar al final de la lista.
    
    public Nodo deleteLast() { 
        Nodo eliminar = null; 
        if(siVacio()) { 
         System.out.println("La lista se encuentra vacia");  
            return null; 
        }       
        if(primero == ultimo) { 
            primero = null; 
            ultimo = null; 
        }
        else { 
            Nodo actual = primero; 
            while(actual.nodoDer != ultimo) { 
                actual = actual.nodoDer; 
            }            
            eliminar = actual.nodoDer; 
            actual.nodoDer = null; 
            ultimo = actual; 
        }      
        this.tamano--; 
        return eliminar; 
    } 
    
//Metodo que imprime el tamaño de la lista.
    
    public int tamano() { 
        return this.tamano; 
    }   
//Metodo que imprime la lista y los valores ingresados.
    public void imprimir() { 
        if(tamano != 0) { 
            Nodo temp = primero; 
            String str = ""; 
            for(int i = 0; i < this.tamano; i++) { 
                str = str + temp.dato + "\n"; 
                temp = temp.nodoDer; 
            }            
         System.out.println("");  
        }       
    }   
   // Metodo que busca un valor en una lista enlazada.
    
    public boolean buscar (int datobusq){ 
      boolean encontrado=false; 
      if( siVacio() ){ 
         System.out.println("La lista se encuentra vacia");  
      } else { 
            Nodo actual = primero; 
            while(actual != null) { 
                if (actual.dato==datobusq){
                 encontrado=true; 
                 System.out.println("Encontrado "+ datobusq);             
                 break;
                }
                actual = actual.nodoDer;
            }           
      }       
        /*this.tamano++; */
        return encontrado;   
 }
}
 

